package com.ltcode.auth.domain.service;

import java.util.Map;

/**
 * JWT令牌服务接口
 * 
 * @author ltcode
 * @since 2024-01-01
 */
public interface JwtTokenService {

    /**
     * 创建JWT令牌
     * 
     * @param claims 声明信息
     * @return JWT令牌
     */
    String createToken(Map<String, Object> claims);

    /**
     * 解析JWT令牌
     * 
     * @param token JWT令牌
     * @return 声明信息
     */
    Map<String, Object> parseToken(String token);

    /**
     * 验证JWT令牌
     * 
     * @param token JWT令牌
     * @return 是否有效
     */
    boolean validateToken(String token);

    /**
     * 从令牌中获取用户ID
     * 
     * @param token JWT令牌
     * @return 用户ID
     */
    Long getUserIdFromToken(String token);

    /**
     * 从令牌中获取用户名
     * 
     * @param token JWT令牌
     * @return 用户名
     */
    String getUsernameFromToken(String token);

    /**
     * 从令牌中获取用户键
     * 
     * @param token JWT令牌
     * @return 用户键
     */
    String getUserKeyFromToken(String token);

    /**
     * 检查令牌是否过期
     * 
     * @param token JWT令牌
     * @return 是否过期
     */
    boolean isTokenExpired(String token);

    /**
     * 获取令牌过期时间
     * 
     * @param token JWT令牌
     * @return 过期时间（毫秒）
     */
    Long getExpirationFromToken(String token);

    /**
     * 刷新令牌
     * 
     * @param token 原令牌
     * @return 新令牌
     */
    String refreshToken(String token);
}
